/**********************
作用：练习实现环形队列
**********************/

#include <stdio.h>

#define MC 10 //队列最大长度
int ring_queue[MC]; //队列数组
int head=0,tail=0;  //队列首（进）尾（出）标识
int rqueue_sign = 0; //队列空满状态标志,存入但未取出的元素个数

//入列函数
int en_queue(int n) 
{
  if(rqueue_sign == MC) return -1; //队列已满，返回异常值

  //如果到达数组终点则跳转到数组起点
  head==MC && (head = 0);
  //可通过把head,tail设置为unsigned，同时MC取对应最大值实现自动取模循环
  
  ring_queue[head++] = n; //入列 
  rqueue_sign ++; //队列标志加1
  return n ; 
}

//出列
int de_queue(void)
{
  if(rqueue_sign == 0) return -1; //队列已空，返回异常值
  tail==MC && (tail = 0); //顶端循环
  rqueue_sign --;
  return ring_queue[tail++];
}


int main() //测试函数
{
  char cmd[10]; //存储命令
  int n;
  int q=0;
  while(1) {
    printf("Input command:");
    scanf(" %10[^\n]",cmd); //\s*[^\n]{,10}
    switch(cmd[0]) {
    case 'e':  //入列
      if(sscanf(cmd + 1,"%d",&n) == 1)
        printf("eq:%d\n",en_queue(n)); //入列结果
      break;
    case 'd': //出列
      printf("dq:%d\n",de_queue());
      break;
    case 'q': //退出循环
      q=1;
      break;     
    }
    if(q==1) break;
  }
}
